package com.example.test;

import java.io.File;

import net.bytebuddy.ByteBuddy;
import net.bytebuddy.dynamic.loading.ClassLoadingStrategy;
import net.bytebuddy.implementation.FixedValue;
import net.bytebuddy.matcher.ElementMatchers;

/**
 * 
 * https://segmentfault.com/a/1190000041998372
 * 
 * @author simple
 *
 */
public class TType {

	public static void main(String[] args) throws Exception {
//		生成class文件至指定目录中
		
//		new ByteBuddy()
//        // 生成 Object的子类
//        .subclass(Object.class)
//        // 生成类的名称为"com.itheima.Type"
//        .name("com.example.model.Type")
//        // 拦截其中的toString()方法
//        .method(ElementMatchers.named("toString"))
//     // 让toString()方法返回固定值
//        .intercept(FixedValue.value("Hello World!"))
//        .make()
//        .saveIn(new File("target/classes"));
        
		Class<?> dynamicClazz = new ByteBuddy()
		        // 生成 Object的子类
		        .subclass(Object.class)
		        // 生成类的名称为"com.itheima.Type"
		        .name("com.example.model.Type")
		        // 拦截其中的toString()方法
		        .method(ElementMatchers.named("toString"))
		     // 让toString()方法返回固定值
		        .intercept(FixedValue.value("Hello World!"))
		        .make()
//		        .saveIn(new File("src/main/java/com/example/model"))
		        //使用WRAPPER 策略加载生成的动态类型
		        .load(TType.class.getClassLoader(),ClassLoadingStrategy.Default.WRAPPER)
		        .getLoaded();
		
		String clname = dynamicClazz.getName();
		System.err.println(clname);
		System.err.println(dynamicClazz.newInstance().toString());
	}
}